Iterative decoders are widely used to recover and correct information in communications and storage systems. When used to decode a codeword sent over or written on a channel with memory, iterative decoders typically consist of two processing blocks: a channel detector and a decoder. The channel detector and the decoder process a received codeword sequentially for multiple iterations. However, so far, iterative decoders have lacked the ability to process a given received codeword concurrently with both a channel detector and a decoder.